﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;

namespace BenchmarkWatch.Test
{
    public class Program
    {
        public static NET.BenchmarkWatch BenchmarkWatch = new NET.BenchmarkWatch();
        public static void Main(params string[] args)
        {
            BenchmarkWatch.Mark();

            var msgs = GetNext();
            BenchmarkWatch.Mark();
            var msgsor = msgs.GetEnumerator();

            BenchmarkWatch.Mark();

            while (msgsor.MoveNext())
            {
                BenchmarkWatch.Mark();
                Console.WriteLine(msgsor.Current);
                BenchmarkWatch.Mark();
            }
            BenchmarkWatch.Mark();

            var msges = BenchmarkWatch.Print();
            foreach (var msg in msges)
            {
                Console.WriteLine(msg);
            }
        }
        

        public static IEnumerable<string> GetNext()
        {
            for (int i = 0; i < 100; i++)
            {
                Thread.Sleep(100);

                yield return string.Format("run {0}", i);
            }
        }

    }
}


// namespace BenchmarkWatch.Test
// {
//     public class Program
//     {
//         public static void Main(params string[] args)
//         {
//             var test = new Test();

//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             test.Method1();
//             test.Method2();
//             test.Method3();
//             var lines = test.Put();
//             foreach (var ln in lines)
//             {
//                 Console.WriteLine(ln);
//             }
//         }
//     }

//     public class Test
//     {
//         private NET.BenchmarkWatch _watch = new NET.BenchmarkWatch();

//         public void Method1()
//         {
//             Thread.Sleep(520);
//             _watch.Mark();
//         }


//         public void Method2()
//         {
//             Thread.Sleep(620);
//             _watch.Mark();
//         }

//         public void Method3()
//         {
//             Thread.Sleep(310);
//             _watch.Mark();
//         }

//         public IEnumerable<string> Put()
//         {
//             return _watch.Print();
//         }
//     }
// }